#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量更新CSV文件表头为中文(英文)格式
"""

import os
import pandas as pd
import glob

# 定义英文到中文(英文)的映射
HEADER_MAPPING = {
    # 基础字段
    'date': '日期(date)',
    'returns': '收益率(returns)',
    'cash': '现金(cash)',
    'holdings': '持仓(holdings)',
    
    # 统计指标
    'Annual Return': '年化收益率(Annual Return)',
    'Cumulative Returns': '累计收益率(Cumulative Returns)',
    'Annual Volatility': '年化波动率(Annual Volatility)',
    'Sharpe Ratio': '夏普比率(Sharpe Ratio)',
    'Calmar Ratio': '卡尔玛比率(Calmar Ratio)',
    'Stability': '稳定性(Stability)',
    'Max Drawdown': '最大回撤(Max Drawdown)',
    'Omega Ratio': '欧米茄比率(Omega Ratio)',
    'Sortino Ratio': '索提诺比率(Sortino Ratio)',
    'Skew': '偏度(Skew)',
    'Kurtosis': '峰度(Kurtosis)',
    'Tail Ratio': '尾部比率(Tail Ratio)',
    'Daily VaR': '日风险价值(Daily VaR)',
    'Alpha': '阿尔法(Alpha)',
    'Beta': '贝塔(Beta)',
    
    # 时间相关
    'Start': '开始日期(Start)',
    'End': '结束日期(End)',
    'Duration': '持续时间(Duration)',
    'Peak': '峰值(Peak)',
    'Valley': '谷值(Valley)',
    
    # 交易相关
    'Gross Leverage': '总杠杆(Gross Leverage)',
    'Net Leverage': '净杠杆(Net Leverage)',
    'Long Leverage': '多头杠杆(Long Leverage)',
    'Short Leverage': '空头杠杆(Short Leverage)',
    'Turnover': '换手率(Turnover)',
    'Transactions': '交易次数(Transactions)',
    'Volume': '成交量(Volume)',
    'Slippage': '滑点(Slippage)',
    
    # 分布相关
    'Count': '数量(Count)',
    'Mean': '均值(Mean)',
    'Std': '标准差(Std)',
    'Min': '最小值(Min)',
    'Max': '最大值(Max)',
    'Median': '中位数(Median)',
    'Q1': '第一四分位数(Q1)',
    'Q3': '第三四分位数(Q3)',
    
    # 月度相关
    'Jan': '一月(Jan)',
    'Feb': '二月(Feb)',
    'Mar': '三月(Mar)',
    'Apr': '四月(Apr)',
    'May': '五月(May)',
    'Jun': '六月(Jun)',
    'Jul': '七月(Jul)',
    'Aug': '八月(Aug)',
    'Sep': '九月(Sep)',
    'Oct': '十月(Oct)',
    'Nov': '十一月(Nov)',
    'Dec': '十二月(Dec)',
    'Year': '年度(Year)',
    
    # 其他常见字段
    'Symbol': '代码(Symbol)',
    'Price': '价格(Price)',
    'Quantity': '数量(Quantity)',
    'Value': '价值(Value)',
    'Weight': '权重(Weight)',
    'Allocation': '配置(Allocation)',
    'Exposure': '敞口(Exposure)',
    'PnL': '损益(PnL)',
    'Commission': '佣金(Commission)',
}

def get_csv_files(directory):
    """获取目录下所有CSV文件"""
    pattern = os.path.join(directory, "*.csv")
    return glob.glob(pattern)

def read_csv_headers(file_path):
    """读取CSV文件的表头"""
    try:
        df = pd.read_csv(file_path, nrows=0)
        return list(df.columns)
    except Exception as e:
        print(f"读取文件 {file_path} 失败: {e}")
        return []

def update_headers(headers, mapping):
    """根据映射更新表头"""
    updated_headers = []
    for header in headers:
        # 如果已经是中文(英文)格式，保持不变
        if '(' in header and ')' in header:
            updated_headers.append(header)
        # 如果在映射中找到，使用映射
        elif header in mapping:
            updated_headers.append(mapping[header])
        # 否则保持原样
        else:
            updated_headers.append(header)
    return updated_headers

def update_csv_file(file_path, new_headers):
    """更新CSV文件的表头"""
    try:
        # 读取原始数据
        df = pd.read_csv(file_path)
        
        # 更新列名
        df.columns = new_headers
        
        # 保存文件
        df.to_csv(file_path, index=False, encoding='utf-8')
        print(f"已更新文件: {os.path.basename(file_path)}")
        return True
    except Exception as e:
        print(f"更新文件 {file_path} 失败: {e}")
        return False

def main():
    directory = "/Users/linda/myprojects/gitee/MoneyDoubleSignal/2025-7-18最优"
    
    # 获取所有CSV文件
    csv_files = get_csv_files(directory)
    print(f"找到 {len(csv_files)} 个CSV文件")
    
    # 处理每个文件
    updated_count = 0
    for file_path in csv_files:
        print(f"\n处理文件: {os.path.basename(file_path)}")
        
        # 读取原始表头
        original_headers = read_csv_headers(file_path)
        if not original_headers:
            continue
            
        print(f"原始表头: {original_headers}")
        
        # 更新表头
        new_headers = update_headers(original_headers, HEADER_MAPPING)
        print(f"新表头: {new_headers}")
        
        # 如果表头有变化，更新文件
        if original_headers != new_headers:
            if update_csv_file(file_path, new_headers):
                updated_count += 1
        else:
            print("表头无需更新")
    
    print(f"\n总共更新了 {updated_count} 个文件")

if __name__ == "__main__":
    main()
